const {getList, getDetail, newBlog, updateBlog, deleteBlog} = require('../controller/blog');
const {SuccessModel, ErrorModel} = require('../model/resModel');

/*统一的登录验证函数*/
const loginCheck = req => {
    if (!req.session.username) {
        return Promise.resolve(new ErrorModel('尚未登录'));
    }
};

const handleBlogRouter = (req, res) => {
    const method = req.method;
    const id = req.query.id;

    /*获取博客列表*/
    if (method === 'GET' && req.path === '/api/blog/list') {
        let author = req.query.author || '';
        const keyword = req.query.keyword || '';
        if (req.query.isadmin) {
            /*管理员界面*/
            let loginCheckResult = loginCheck(req);
            if (loginCheckResult) {
                /*未登录*/
                return loginCheckResult;
            }
            /*强制查询自己的博客*/
            author = req.session.username;
        }
        const result = getList(author, keyword);
        return result.then(listData => {
            return new SuccessModel(listData);
        })
    }

    /*获取博客详情*/
    if (method === 'GET' && req.path === '/api/blog/detail') {
        const result = getDetail(id);
        return result.then(data => {
            return new SuccessModel(data);
        })
    }

    /*新建一篇博客*/
    if (method === 'POST' && req.path === '/api/blog/new') {
        let loginCheckResult = loginCheck(req);
        if (loginCheckResult) {
            /*未登录*/
            return loginCheckResult;
        }
        req.body.author = req.session.username;
        let result = newBlog(req.body);
        return result.then(data => {
            return new SuccessModel(data);
        })
    }

    /*更新一篇博客*/
    if (method === 'POST' && req.path === '/api/blog/update') {
        const loginCheckResult = loginCheck(req);
        if (loginCheckResult) {
            return loginCheckResult;
        }
        const result = updateBlog(id, req.body);
        return result.then(value => {
            if (value) {
                return new SuccessModel();
            } else {
                return new ErrorModel('更新博客失败');
            }
        })
    }

    /*删除一篇博客*/
    if (method === 'POST' && req.path === '/api/blog/delete') {
        let loginCheckResult = loginCheck(req);
        if (loginCheckResult) {
            return loginCheckResult;
        }
        const author = req.session.username;
        let result = deleteBlog(id, author);
        return result.then(value => {
            if (value) {
                return new SuccessModel();
            } else {
                return new ErrorModel('删除博客失败');
            }
        })

    }
};

module.exports = handleBlogRouter;